該把程式打包了,先把dockerfile寫出來,在app中創建Dockerfile寫入
FROM golang
WORKDIR /app
ADD . /app
RUN cd /app && go build -o app
ENTRYPOINT ./app
解釋:
WORKDIR
定義docker內的工作環境ADD . /app
將目前的資料夾"."以下的所有檔案與資料夾放到container裡的/appRUN
在docker環境內運行的指令ENTRYPOINT
在執行docker run時的指令,使用encrypt我們可以像command line一樣直接在後面打參數,參數會被接在ENTRYPOINT後有些東西不想一起包進docker,可以像.gitignore一樣寫個.dockerignore,把不想被打包的文件寫上,舉例:
# 忽略git
.gitignore
.git
# 說明文件
*.md
接著輸入
docker build -t your_user_name/your_app_name .
這樣就完成image,但問題來了,明明go就能直接編譯出獨立的執行檔,我們有必要把整個go環境都放到image裡嗎?
現在修改一下docker file
# build stage
FROM golang AS build-env
ADD . /src
RUN cd /src && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app
# final stage
FROM scratch
COPY --from=build-env /src/app /
ENTRYPOINT ["/app"]
解釋:
AS
將這個build的image重命名,之後就能用--from
將裡面的資料轉到其他image上現在build起來
docker build -t your_user_name/your_app_name .
來看看新的image有多大
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
your_user_name/your_app_name latest b03308aef90d 21 minutes ago 17.3MB
nginx latest 4bb46517cac3 2 weeks ago 133MB
golang latest 75605a415539 2 weeks ago 839MB
mysql 8.0 0d64f46acfd1 3 weeks ago 544MB
vishnunair/docker-mkcert latest e664362accee 23 months ago 886MB
記得在run的時候把log,view,config等資料夾掛載上去
今天把docker打包完了,明天要使用docker compose來把應用整合
目前的工作環境
.
├── app
│ ├── apperr
│ │ ├── error.go
│ │ └── handle.go
│ ├── common
│ │ └── cookie.go
│ ├── database
│ │ ├── auth.go
│ │ ├── connect.go
│ │ ├── error.go
│ │ ├── main.go
│ │ └── scheme.go
│ ├── Dockerfile
│ ├── go.mod
│ ├── go.sum
│ ├── log
│ │ ├── logger.go
│ │ └── logging.go
│ ├── main.go
│ ├── middleware
│ │ ├── auth.go
│ │ ├── error.go
│ │ └── log.go
│ ├── router
│ │ ├── account.go
│ │ ├── asset.go
│ │ ├── host_switch.go
│ │ └── main.go
│ ├── serve
│ │ ├── account.go
│ │ ├── asset.go
│ │ ├── auth.go
│ │ ├── main.go
│ │ └── main_test.go
│ ├── setting
│ │ └── setting.go
│ ├── util
│ │ ├── debug
│ │ │ ├── stack.go
│ │ │ └── stack_test.go
│ │ ├── file
│ │ │ └── file.go
│ │ ├── hash
│ │ │ ├── hash.go
│ │ │ └── hash_test.go
│ │ └── random
│ │ └── random.go
│ └── view
│ ├── css
│ ├── html
│ │ ├── component
│ │ │ ├── blogContainer.html
│ │ │ ├── blogList.html
│ │ │ ├── editor.html
│ │ │ ├── navigation.html
│ │ │ └── signContainer.html
│ │ └── meta
│ │ ├── head.html
│ │ └── index.html
│ └── js
│ ├── account.js
│ ├── editor.js
│ ├── main.js
│ ├── owner.js
│ └── sign.js
├── config
│ ├── app
│ │ ├── app.yaml
│ │ └── error.yaml
│ └── nginx
│ └── nginx.conf
└── database
└── maindata